/*This file is part of Sandbox.

Sandbox is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License.

Sandbox is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Sandbox.  If not, see <http://www.gnu.org/licenses/>.

For contact, see the About page of my blog: <http://mygeekyware.wordpress.com/>.*/

#include <iostream>
#include "controlador.h"
#include "definiciones.h"
#include <SDL/SDL.h>
#include <SDL/SDL_events.h>
#include "particula.h"
#include <math.h>

using namespace std;

void controlador::Firework(particula matriz[400][220], int x, int y) {
    if (matriz[x][y].contador == 0) {
        cout << "TIPO 2: " << matriz[x][y].tipo2 << endl;
        if (matriz[x-1][y-1].tipo == 0) {
            matriz[x-1][y-1].tipo = matriz[x][y].tipo2;
            matriz[x-1][y-1].vx = -7;
            matriz[x-1][y-1].vy = -7;
            matriz[x-1][y-1].peso = get_weight(matriz[x][y].tipo2);
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x-1][y-1].contador = 30;
        }
        if (matriz[x-1][y].tipo == 0) {
            matriz[x-1][y].tipo = matriz[x][y].tipo2;
            matriz[x-1][y].vx = -7;
            matriz[x-1][y].vy = 0;
            matriz[x-1][y].peso = get_weight(matriz[x][y].tipo2);
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x-1][y].contador = 30;
        }
        if (matriz[x-1][y+1].tipo == 0) {
            matriz[x-1][y+1].tipo = matriz[x][y].tipo2;
            matriz[x-1][y+1].vx = -7;
            matriz[x-1][y+1].vy = 7;
            matriz[x-1][y+1].peso = get_weight(matriz[x][y].tipo2);
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x+1][y-1].contador = 30;
        }
        if (matriz[x][y-1].tipo == 0) {
            matriz[x][y-1].tipo = matriz[x][y].tipo2;
            matriz[x][y-1].vx = 0;
            matriz[x][y-1].vy = -7;
            matriz[x][y-1].peso = get_weight(matriz[x][y].tipo2);
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x][y-1].contador = 30;
        }
        if (matriz[x][y+1].tipo == 0) {
            matriz[x][y+1].tipo = matriz[x][y].tipo2;
            matriz[x][y+1].vx = 0;
            matriz[x][y+1].vy = 7;
            matriz[x][y+1].peso = get_weight(matriz[x][y].tipo2);
            matriz[x][y+1].update = false;
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x][y+1].contador = 30;
        }
        if (matriz[x+1][y].tipo == 0) {
            matriz[x+1][y].tipo = matriz[x][y].tipo2;
            matriz[x+1][y].vx = 7;
            matriz[x+1][y].vy = 0;
            matriz[x+1][y].peso = get_weight(matriz[x][y].tipo2);
            matriz[x+1][y].update = false;
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x+1][y].contador = 30;
        }
        if (matriz[x+1][y-1].tipo == 0) {
            matriz[x+1][y-1].tipo = matriz[x][y].tipo2;
            matriz[x+1][y-1].vx = 7;
            matriz[x+1][y-1].vy = -7;
            matriz[x+1][y-1].peso = get_weight(matriz[x][y].tipo2);
            matriz[x+1][y-1].update = false;
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x+1][y-1].contador = 30;
        }
        if (matriz[x+1][y+1].tipo == 0) {
            matriz[x+1][y+1].tipo = matriz[x][y].tipo2;
            matriz[x+1][y+1].vx = 7;
            matriz[x+1][y+1].vy = 7;
            matriz[x+1][y+1].peso = get_weight(matriz[x][y].tipo2);
            matriz[x+1][y+1].update = false;
            if (matriz[x][y].tipo2 == FIRE || matriz[x][y].tipo2 == FIREWORK)
                    matriz[x+1][y+1].contador = 30;
        }
        Clear(matriz,x,y);
    }
    else if (matriz[x][y].contador == 30) {
        if (matriz[x-1][y-1].tipo == MAGMA || matriz[x-1][y].tipo == MAGMA || matriz[x-1][y+1].tipo == MAGMA || //I know: shitty "if", and thanks there are no more lightening materials (so far)
                matriz[x][y-1].tipo == MAGMA || matriz[x][y+1].tipo == MAGMA ||
                matriz[x+1][y-1].tipo == MAGMA || matriz[x+1][y].tipo == MAGMA || matriz[x+1][y+1].tipo == MAGMA ||
                matriz[x-1][y-1].tipo == FIRE || matriz[x-1][y].tipo == FIRE || matriz[x-1][y+1].tipo == FIRE ||
                matriz[x][y-1].tipo == FIRE || matriz[x][y+1].tipo == FIRE ||
                matriz[x+1][y-1].tipo == FIRE || matriz[x+1][y].tipo == FIRE || matriz[x+1][y+1].tipo == FIRE) {
            matriz[x][y].contador--;
            matriz[x][y].vx = 0;
            matriz[x][y].vy = -15;
        }
    }
    else {
        if (matriz[x][y].vy == 0) {
            matriz[x][y].contador = 0;
        }
        else if (matriz[x][y+matriz[x][y].vy].tipo == 0 && contadorgeneral%3 != 0) {
            Copy(matriz,x,y,x,y+matriz[x][y].vy);
            matriz[x][y+matriz[x][y].vy].vy++;
            matriz[x][y+matriz[x][y].vy].contador--;
            Clear(matriz,x,y);
        }
        else if (matriz[x][y+matriz[x][y].vy].tipo != 0)
            Clear(matriz,x,y);
    }

}